package com.yanqu.road.entity.enums.activity.stronghold;

import com.yanqu.road.utils.property.Property;
import com.yanqu.road.utils.property.PropertyHelper;

import java.util.ArrayList;
import java.util.List;

public enum eStrongholdParamType {
    /**
     * 野外据点战体力配置：初始体力;体力上限
     */
    WILD_POWER_PARAM("wild_power_param", str -> {
        List<Integer> list = new ArrayList<>();
        for (String s : str.split(";")) {
            list.add(Integer.parseInt(s));
        }
        return list;
    }),
    /**
     * 野外据点战探索体力消耗值
     */
    WILD_SEARCH_POWER("wild_search_power", (IStrongholdConfigParser<Integer>) Integer::parseInt),
    /**
     * 野外据点战移动房间体力消耗值
     */
    WILD_MOVE_POWER("wild_move_power", (IStrongholdConfigParser<Integer>) Integer::parseInt),
    /**
     * 野外据点战体力恢复1点所需秒数
     */
    WILD_POWER_RECOVER_TIME("wild_power_recover_time", (IStrongholdConfigParser<Integer>) Integer::parseInt),
    /**
     * 野外据点战探索令道具ID，恢复的体力值配置在道具参数1中
     */
    WILD_RECOVER_POWER_ITEM("wild_recover_power_item", (IStrongholdConfigParser<Integer>) Integer::parseInt),
    /**
     * 野外据点战玩家拥有的宝箱上限
     */
    WILD_BOX_MAX_NUM("wild_box_max_num", (IStrongholdConfigParser<Integer>) Integer::parseInt),
    /**
     * 野外据点房间事件宝箱ID：金宝箱、银宝箱、铜宝箱
     */
    WILD_BOX_ID_PARAM("wild_box_id_param", str -> {
        List<Integer> list = new ArrayList<>();
        for (String s : str.split(";")) {
            list.add(Integer.parseInt(s));
        }
        return list;
    }),
    /**
     * 野外据点房间类型材料ID：丝绸、瓷器、茶叶
     */
    WILD_ITEM_ID_PARAM("wild_item_id_param", str -> {
        List<Integer> list = new ArrayList<>();
        for (String s : str.split(";")) {
            list.add(Integer.parseInt(s));
        }
        return list;
    }),
    /**
     * 野外据点房间探索派遣门客免费次数上限
     */
    WILD_PARTONS_FREE_TIMES("wild_partons_free_times", (IStrongholdConfigParser<Integer>) Integer::parseInt),
    /**
     * 野外据点房间探索派遣门客额外次数上限
     */
    WILD_PARTONS_BUY_TIMES("wild_partons_buy_times", (IStrongholdConfigParser<Integer>) Integer::parseInt),
    /**
     * 野外据点房间探索派遣门客花费元宝数
     */
    WILD_PARTONS_BUY_CONSUME("wild_partons_buy_consume", PropertyHelper::parseStringToProperty),
    /**
     * 野外据点房间探索玩家击杀悬赏分数配置：初始悬赏分，递增悬赏分
     */
    WILD_REWARD_POINT_PARAM("wild_reward_point_param", str -> {
        List<Integer> list = new ArrayList<>();
        for (String s : str.split(";")) {
            list.add(Integer.parseInt(s));
        }
        return list;
    }),
    /**
     * 野外据点房间探索玩家防守分数配置：初始防守分，递减防守分，保底防守分
     */
    WILD_DEFEND_REWAD_POINT_PARAM("wild_defend_rewad_point_param", str -> {
        List<Integer> list = new ArrayList<>();
        for (String s : str.split(";")) {
            list.add(Integer.parseInt(s));
        }
        return list;
    }),
    /**
     * 商会据点排名血量加成，从第1名往后的千分比加成配置
     */
    UNION_BLOOD_RANK_ADDITION("union_blood_rank_addition", str -> {
        List<Integer> list = new ArrayList<>();
        for (String s : str.split(";")) {
            list.add(Integer.parseInt(s));
        }
        return list;
    }),
    /**
     * 淘汰赛商会血量计算系数列表
     */
    UNION_BLOOD_PARAM("union_blood_param", (IStrongholdConfigParser<Integer>) Integer::parseInt),
    /**
     * 淘汰赛沙铲获得参数配置，每个通商令获得的沙铲数量
     */
    REWARD_SHOVEL_NUM("reward_shovel_num", (IStrongholdConfigParser<Integer>) Integer::parseInt),
    /**
     * 淘汰赛财神助力所需消耗道具
     */
    MAMMON_HELP_CONSUME("mammon_help_consume", str -> {
        List<Property> list = new ArrayList<>();
        for (String s : str.split("\\|")) {
            list.add(PropertyHelper.parseStringToProperty(s));
        }
        return list;
    }),
    /**
     * 淘汰赛商会积分计算公式参数
     */
    UNION_INTEGRAL_PARAM("union_integral_param", (IStrongholdConfigParser<Integer>) Integer::parseInt),
    /**
     * 淘汰赛商会积分继承千分比参数
     */
    UNION_INTEGRAL_INHERIT("union_integral_inherit", (IStrongholdConfigParser<Integer>) Integer::parseInt),
    ;
    private String key;

    private IStrongholdConfigParser parser;

    eStrongholdParamType(String key, IStrongholdConfigParser parser) {
        this.key = key;
        this.parser = parser;
    }

    public String getKey() {
        return key;
    }

    public <T> T getValue(String paramStr) {
        return (T)parser.parse(paramStr);
    }

    interface IStrongholdConfigParser<T> {
        T parse(String str);
    }

    public static void main(String[] args) {
        Integer value = UNION_INTEGRAL_INHERIT.getValue("300");
        Property needItem = WILD_PARTONS_BUY_CONSUME.getValue("101000=100");
        System.out.println(value +"         " + needItem        );
    }

}
